"""
递归的基本概念:有i一个函数调用自身的行为,且有一个明确的返回条件
迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.
"""


# 递归公式 0!=1，n!=(n-1)!×n 以下案例不涉及 0
# 不用递归实现求一个正整数的阶乘

def factorial(number):
    # range函数的值为 从1到 number-1
    for i in range(1, number):
        number *= i
    return number


"""
print("手写方法实现阶乘")
number = int(input('请输入一个正整数:'))
result = factorial(number)
print('%d 的阶乘为 %d' % (number, result))
print("有 ",len(str(result))," 位")
"""


# 使用递归实现求一个正整数的阶乘
def recursion(number):
    # 有一个明确的返回条件
    if number == 1:
        return 1
    else:
        # 有函数调用自身的行为
        number *= recursion(number - 1)
        return number

# 最多实现998的阶乘

print("使用递归实现阶乘")
number = int(input('请输入一个正整数:'))
result = recursion(number)
print("%d 的阶乘为 %d" % (number, result))
print("有 ",len(str(result))," 位")
